package com.cw.demo.utils;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidPooledConnection;
import com.cw.demo.model.DbConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 操作数据库的工具类
 *  使用单例模式来创建
 */
@Component
public class DbUtils {
    @Bean
    public DruidDataSource getdatesource(){
        DruidDataSource dataSource=new DruidDataSource();
        DbXmlReadUtil dbXmlReadUtil = new DbXmlReadUtil();
        DbConfig dbConfig = null;
        try {
            dbConfig = dbXmlReadUtil.readDbXml();
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 1)创建连接池：druid
        dataSource = new DruidDataSource();
        // 2)指定连接池连接数据库所需的参数
        //1、设置连接数据库的驱动
        dataSource.setDriverClassName(dbConfig.getDriverName());
        //2、设置连接数据库的URL
        dataSource.setUrl(dbConfig.getUrl());
        //3、数据库的连接帐号和连接密码
        dataSource.setUsername(dbConfig.getUserName());
        dataSource.setPassword(dbConfig.getPassword());


        //4、 可以对druid连接池进行一些相关参数配置
        dataSource.setInitialSize(dbConfig.getInitialSize());//设置连接池在创建成功时，默认的连接数量
        dataSource.setMinIdle(dbConfig.getMinIdle()); //设置最小连接池数量。确保连接池中至少存在参数中设置的连接个数为空闲状态
        dataSource.setMaxActive(dbConfig.getMaxActive());//设置最大连接池数量。连接池中超过大最数量时，超出的连接对象将会被销毁
        dataSource.setMaxWait(dbConfig.getMaxWait());//设置最大等待时长
        dataSource.setTimeBetweenEvictionRunsMillis(dbConfig.getTimeBetweenEvictionRunsMillis());//设置程序自动检测连接状态的时间间隔
        return dataSource;
    }

}
